essay

나는 어떻게 개발 공부를 했나, 1편

13 min read|17. 9. 24.

이 글은 제가 지난 1년 6개월 간의 개발에 몰두했던 경험에 대한 회고글입니다.

1편, 어쩌면 뜬구름 잡는 이야기

들어가면서,

요즘, 전산 관련 전공생이 아님에도 불구하고 많은 사람들이 개발을 하려 합니다.

  1. 자신의 직업이 개발자와 협업하는 직업이라서
  2. 단순히 개발이라는 것을 정말 해보고 싶어서
  3. 개발 직군이 취업이 잘 된다고 해서
  4. 자신만의 서비스를 직접 만들고 싶어서

등등 각자 자신만의 이유로 개발 공부를 시작하시는 분들에게 진심으로 응원하는 마음을 담아 몇 자 적어보려고 합니다. 일단 저는, '컴퓨터공학' 또는 '소프트웨어 공학' (등등의 많은 이름들의 전공) 전공이라는 대학의 정규 교육과정 속에서 개발자가 되진 않았습니다. 다른 전공의 대학생이었으며 다른 직군에 속해있지 않았습니다. 때문에 제 글은 다소 편협한 시각에서 작성되었습니다.

지금, 무엇이 잘못되었는가

대부분의 컴퓨터 공학 커리큘럼은 특정 전공 과목에 대한 수업들이 각각의 학기를 구성하고 있습니다. 이러한 커리큘럼대로 차근차근 공부하는 것이 맞는 분이 계신 반면, 그렇지 않은 사람도 있습니다. 제가 그랬고 제 주변에도 많이 존재합니다. 그런데 이러한 사람들을 위한 교육과정은 존재하지 않습니다. 그 이유는 현재 교육과정을 설계하는 사람들이 차근차근 공부하셨던 분들이기 때문입니다. 똑똑하신 교수님들 그리고 현재 커리큘럼을 만드는 분들은 기존의 커리큘럼으로 학습을 하여 교수가 된 것이고, 교육 과정 위원회가 된 것이기 때문입니다. 그렇기 때문에 자신들이 학습해온 방식이 최적의 커리큘럼이라고 생각하고 교육과정을 설계합니다. 기초부터 차근차근 학습하여 각각의 과목들을 유기적으로 연결하고 궁극적으로 개발이라는 큰 그림을 볼 수 있다면 더할 나위 없겠습니다. 하지만 저는 큰 그림이 그려지지 않은 채, 각각의 부분들을 학습하는 것에 부담을 느꼈고, 저에게 맞지 않는 학습법이라고 생각했습니다. 만약 제가 컴퓨터 공학을 전공하는 학생이었다면 저는 일찍이 개발이라는 분야에 흥미를 잃었을 것입니다. 그래서 어디에선가 자신과 맞지 않는 학습 방법 때문에 고생하고 있을, 저와 같은 사람을 위해 제가 학습한 방법에 대해 말씀드리려고 합니다.

나는 무엇을 개발하고 싶은가?

개발 공부를 처음 시작할 때를 떠올려보면 제가 무엇을 개발하고 싶은지도 몰랐습니다. '하고 싶은 것을 찾기'란 말처럼 쉽지 않습니다. 직접 해보지 않으면 모르기 때문입니다. 물론 개발의 시작이 자신만의 서비스를 만들고 싶었던 분은 하고 싶은 것을 바로 찾을 수 있겠죠. 개발이라는 분야를 정했지만 이 바닥도 분야에 따라 천지차이입니다. 다행히 겉핥기 식으로라도 어떠한 분야가 있으며 무엇을 학습해야 하는지 정도는 구글링을 통해 해결할 수 있는 시대가 되었습니다. 저 또한 짧은 지식으로 정리한 적이 있습니다. 이 부분은 너무 길어질 수 있으므로 다음 포스팅으로 대체합니다. > 개발 입문자를 위한 짤막한 안내서 - Hello Coding World

나는 무엇을 해야하는가?

우선 자신이 무엇을 모르는지 아는 것이 중요합니다. 사실 무엇을 모르는지 깨닫는 것도 오래걸립니다. 내가 무엇을 모르는지 안다는 것은 자기가 개발하고 싶은 분야에 대해서 어느 정도 큰 틀을 이해하고 있다는 말이기 때문입니다. 그렇기 때문에 각각의 세부 분야에 대해서 깊이 공부하기 보다는 전체적인 큰 틀을 잡는 것이 중요합니다.

사실 우리는 알게 모르게 여러 분야에서 이렇게 '학습'을 합니다. 장애물 달리기 경주를 예로 들어보겠습니다. 경주에서 어느 정도의 기록을 내기 위해서는 어떻게 해야 할까요? 우선 경주에서 어떠한 장애물들이 존재하는지 파악해야 합니다. 각각의 장애물들을 어설프게 지나가더라도 일단 한 바퀴는 돌아봐야 합니다. 무작정 달리기 연습만 한다고 해서, 특정 장애물에 대해서 연습을 한다고 해서 기록이 오르지 않습니다. 물론 오르기야 하겠습니다만, 그 방법은 지루하고 힘든 길일 가능성이 높습니다.

장애물 달리기를 예로 들었더니 너무 당연한 얘기라고 합니다만 이것은 학습에서도 마찬가지 입니다. 우리가 개발하고자 하는 분야에서 어떠한 '성취'를 이루기 위해서는 그 분야에 대해서 어설프게라도 한 '사이클'을 돌아봐야 합니다. 무작정 특정 개발 언어를 깊게 공부한다던가, 운영체제와 같은 CS 기초과목을 깊게 공부한다는 것이 우선되면 그 성취는 언젠가는 올지 몰라도 그 길은 매우 재미없고 힘든 길일 가능성이 높습니다.

공부는 일단 재미없습니다. 개발이라는 분야도 끊임없이 공부해야 하는 분야입니다. 개발이 너무 하고 싶어서 개발 공부를 시작했더라도 눈 앞의 성취가 바로 보이지 않는다면 금방 재미없어집니다.

지금 학습하고자 하는 이것을 왜 학습해야 하는지를 알고 학습해야 합니다. 경주 중 어느 위치에 특정 장애물이 있으니 그 때의 페이스에 맞춰 그 장애물에 대한 연습을 하는 것처럼.

한 사이클을 돌아봤다면, 모르는 용어도 많고 무슨 원리로 이렇게 동작하는지에 대한 이해를 필요로 하는 것이 당연합니다. 그 부분부터 학습해나가면 됩니다. 무엇을 하려고 했는데 이 부분에 대한 지식이 필요할 때 학습하는 것입니다. 제가 존경하는 개발자 분은 이러한 학습 방법을 '양파 껍질 학습 방법'이라고 하셨습니다.

그리고 한 가지 더, '열심히'보다 '꾸준히'하는 것이 중요하다고 생각합니다. 이틀 12시간 앉아서 열심히 공부만 하는 것은 누구나 다 할 수 있습니다. 하지만 하루에 4시간씩, 6시간씩을 주 5일을 일정하게 꾸준히 하는 것은 정말 힘듭니다. 양파를 까다말면 눈물만 날 뿐입니다.

당신의 학습 방법은 안녕하신가요?

공부에는 왕도가 없다고 하는데, 우리는 이미 그 왕도라고 믿고 있는 과정속에서 학습을 하고 있습니다. 모두가 이 길을 걷고 있기 때문에 이 길에서, 이 무리의 흐름 속에서 벗어나기란 쉽지 않습니다. 무조건 벗어나는 것이 좋다는 것이 아닙니다. 자신을 한 번 깊게 돌아보고 자신만의 학습 방법을 찾는 것이 우선이라고 생각합니다. 그리고 이 길이 아니다 싶으면 과감히 벗어날 수 있는 용기를 갖고 도전해야 할 것입니다. 혹시 학습을 하는데 있어 지나치게 힘이 들거나 재미가 없다면 자신의 학습 방법을 한 번 쯤 돌아봐야 한다고 생각합니다. 이 글을 보게 되는 분들 중 한 분이라도 저와 같은 성향의 사람이 있다면 이 글은 성공적이라고 할 수 있을 것 같습니다.

마무리

글을 쓰면서 늘 아쉬운 점이 있습니다. 장기적인 관점에서 '이상향'에 대해 글을 쓰다보면 뜬구름 잡는 이야기가 된다는 것인데요, 이번 글도 그저 그런 이야기가 된 것 같습니다. 사람들은 구체적인 플랜을 원하지만 각기 다른 배경의 사람들에게 정확히 맞는 플랜을 제시하기란 쉽지 않은 것 같습니다. 그러다보니 보다 추상적이고 폭넓은 이야기를 할 수 밖에 없는 것 같습니다. 다음 글은 보다 실질적인 이야기가 되도록 노력해서 찾아오겠습니다. 감사합니다.